define(function (require, exports, module) {
	
	var Picker = require("./nuui/nuui-component/nuui-picker");
	
	/**
	 * @class Simplepicker
	 * @memberof Nuui
	 * @classdesc 利用input和picker组件创建的滚轮选择器<br/>
	 * 		基本元素item:<br/>
	 * 		item内至少有2个属性:key和text,text用于展示,key为真正的值</br>
	 * 		可以设置更多的值,并可以在selectHandler中访问到</br>
	 * 		如</br>
	 * 		item={key:"USD", text:"美元"}</br>
	 * 		item={key:"6225123412341234", text:"6225****1234", name:"我的账户"}</br>
	 * 		Simplepicker文档中提到的item均是这个形式
	 * @param {$} input - input的$形式
	 * @param {object} config - 配置
	 * @param {string} config.title - 显示的标题<br/>
	 * @param {array} config.data - item数组<br/>
	 * @param {func} config.selectHandler(item) - 选中一个元素后触发的事件<br/>
	 * @param {view} view - 当前的view,一定要填
	 * @example var datepicker = new Simplepicker(view.$("#simplepicker"), {
	 * 	title:"请选择账号",
	 * 	selectHandler:function(){
	 * 		if(item){
	 * 			view.$("#balance").html(Nuui.utils.toCashWithComma(item.balance));
	 * 		}else{
	 * 			view.$("#balance").html("");
	 * 		}
	 *  }
	 *
	 */
	var Simplepicker = module.exports = function(input, config, view){
		this.initailize(input, config, view);
		return this;
	};
	
	Simplepicker.prototype = {
		/**
		 * 初始化方法
		 */
		initailize:function(input, config, view){
			this._config = $.extend({}, this._defaultConfig);
			if(config){
				this._config = $.extend(this._config, config);
			}

			// 由于目前采取单页模式,创建时必须输入view参数
			if(!view){
				alert("simplepicker:请输入view参数");
				return;
			}
			
			// 
			this._input = input;
			this._id = input.attr("id");
			this._input.data("simplepicker", this);
			this._input.attr("readOnly", true);
			
			this._input.bind(this._tap_event, $.proxy(this._onInputTap, this));
			// 在Safari下点击会有光标
			this._input.bind("focus", function(){this.blur();});
			
			this._itemArray = [];

			if(this._config.data){
				this._itemArray = this._config.data;
			}
			
			var sp = this;
			this._picker = new Picker({
				id:sp._config.id,
				buttons:[{
					content:"<button class='FR'>清空</button>",
					func:function(){
						sp._input.val("");
						this.hide();
					}
				}],
				scrollers:[{
					title:sp._config.title,
					data:sp._itemArray,
					flex:1
				}],
				onShow:$.proxy(this._onShow, this),
				onHide:$.proxy(this._onHide, this)
				
			}, view);
		},
		
		/**
		 * 默认设置
		 */
		_defaultConfig:{
			title:"请选择",
			selectHandler:null
		},
		/**
		 * 点击事件
		 */
		_tap_event:"tap",
		
		/**
		 * input对象
		 */
		_input:null,
		
		/**
		 * id
		 */
		_id:null,
		
		_config:null,

		_onInputTap:function(){
			// 如果没有备选项则不展示
			if(this._input.attr("disabled") || this._itemArray.length == 0){
				return false;
			}
			this._picker.show();
			return false;
		},
		
		_onShow:function(){
			// 根据key重新滚到对应目标
			var key = this.getKey();
			if(key){
				this._picker.scrollToValue(0, key, false);
			}
		},
		
		_onHide:function(result){
			// 如果确定,则更新input数据
			if(result){
				var key = result[0];
				this.setTextByKey(key);
			}
			
			// 触发selectHandler,即使没有对应值,此时item为null
			if(this._config.selectHandler){
				var item = this._getItemByText();
				this._config.selectHandler(item);
			}
		},
		
		// 根据当前text获取item
		_getItemByText:function(){
			var value = this._input.val();
			for(var i = 0; i < this._itemArray.length; i++){
				if(this._itemArray[i].text == value){
					return this._itemArray[i];
				}
			}
			return null;
		},

		/**
		 * @desc 为simplepicker设置源数据
		 * @memberof Nuui.Simplepicker
		 * @func setData
		 * @instance
		 * @param {array} itemArray - 存放item的array
		 */
		setData:function(itemArray){
			this._itemArray = itemArray;
			// 更新picker的滚轮
			this._picker.updateData(0, this._itemArray);
			
			// 如果更新data后,原来的文本没有对应的值,清空input
			if(!this._getItemByText()){
				this._input.val("");
			}
		},

		/**
		 * @desc 清除Simplepicker源数据
		 * @memberof Nuui.Simplepicker
		 * @func clearData
		 * @instance
		 */
		clearData:function(){
			this.setData([]);
		},

		/**
		 * @desc 获取simplepicker源数据
		 * @memberof Nuui.Simplepicker
		 * @func getData
		 * @instance
		 * @returns {array} simplepicker源数据数组
		 */
		getData:function(){
			return this._itemArray;
		},

		/**
		 * @desc 获取simplepicker源数据大小
		 * @memberof Nuui.Simplepicker
		 * @func getDataSize
		 * @instance
		 * @returns {int} simplepicker源数据大小
		 */
		getDataSize:function(){
			return this._itemArray.length;
		},
		
		/**
		 * @desc 获取当前选中的文本对应的item的key
		 * @memberof Nuui.Simplepicker
		 * @func getKey
		 * @instance
		 * @returns {string} item对应的key
		 */
		getKey:function(){
			var item = this._getItemByText();
			if(item == null){
				return null;
			}else{
				return item.key;
			}
		},
		
		/**
		 * @desc 获取当前选中的文本
		 * @memberof Nuui.Simplepicker
		 * @func getText
		 * @instance
		 * @returns {string} 当前选中的文本
		 */
		getText:function(){
			var item = this._getItemByText();
			if(item == null){
				return null;
			}else{
				return item.text;
			}
		},
		
		/**
		 * @desc 按照传入的key给simplepicker设置相应的文本
		 * @memberof Nuui.Simplepicker
		 * @func setTextByKey
		 * @instance
		 * @param {string} key - item对应的key值
		 */
		setTextByKey:function(key){
			for(var i = 0; i < this._itemArray.length; i++){
				if(this._itemArray[i].key == key){
					this._input.val(this._itemArray[i].text);
				}
			}
		},

		/**
		 * @desc 设置selectHandler
		 * @memberof Nuui.Simplepicker
		 * @func setSelectHandler
		 * @instance
		 * @param {func} selectHandler
		 */
		setSelectHandler:function(selectHandler){
			this._config.selectHandler = selectHandler;
		}
		
		
	};
});
